#include "qlspluginsmanagerpool.h"

/* static */
QMutex QLsPluginsManagerPool::m_instanceMutex;
QLsPluginsManagerPool *QLsPluginsManagerPool::m_instance = nullptr;

QLsPluginsManagerPool::QLsPluginsManagerPool(QObject *parent) : QObject(parent)
{

}

/* 唯一实例 */
QLsPluginsManagerPool &QLsPluginsManagerPool::GetInstance()
{
	if(!m_instance)
	{
		QMutexLocker locker(&m_instanceMutex);
		if(!m_instance)
			m_instance = new QLsPluginsManagerPool;
	}
	return *m_instance;
}

/* 当前存在的 插件管理器 列表 */
QList<QLsPluginsManager *> QLsPluginsManagerPool::getPluginsManagerList() const
{
	return m_pluginsManagerList;
}

/* 获取插件管理器 */
QLsPluginsManager *QLsPluginsManagerPool::GetPluginsManagerByPluginsDir(const QString &pluginsDir)
{
	/* 查找现有的插件管理器 */
	foreach (QLsPluginsManager *pluginsManager, m_pluginsManagerList)
	{
		if(pluginsManager->pluginsDir() == pluginsDir)
			return pluginsManager;
	}

	/* 没有则创建一个 */
	QLsPluginsManager *pluginsManager = new QLsPluginsManager(pluginsDir);
	m_pluginsManagerList.append(pluginsManager);
	return pluginsManager;
}

/* 销毁插件管理器 */
void QLsPluginsManagerPool::DestroyPluginsManager(QLsPluginsManager *pluginsManager)
{
	m_pluginsManagerList.removeOne(pluginsManager);
	delete pluginsManager;
}
